package cn.simon.free.ratelimiter.annotation;

import java.lang.annotation.*;

/**
 * 启用/关闭分布式限流器
 * 外部系统调用自有接口限制请求频率
 *
 * @author simon
 * @date 2019/12/26 11:01
 * @copyright:
 * @modifier
 * @motto a no talent, people who have to study hard
 */
@Documented
@Inherited
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimiter {

    /**
     * 唯一标识(自动生成)
     * 默认使用类的hashCode,建议不要在controller层使用反射机制,
     * 使用反射机制会导致找不到对应的限流器
     *
     * @return
     */
    String unique() default "";

    /**
     * 限流器的名称(暂未使用)
     *
     * @return
     */
    String name() default "";

    /**
     * 限制速率
     *
     * @return
     */
    double rate() default 0;

    /**
     * 是否不参与限流,默认情况下,所有外部的调用都要参与限流
     * 特殊情况下,不用参与限流,如需不参与限流设置为true即可
     *
     * @return
     */
    boolean optOut() default false;

}
